package com.example.pulseanalyse.veinType;

import android.util.Log;

import com.example.pulseanalyse.ConstantCls;

import java.util.ArrayList;
import java.util.List;

/**
 * @author: yyw
 * time: 2020/12/8 10:58
 * desc:
 */
public class newPulseAnalysis {
    public static final String TAG = "newPulseAnalysis===";

    public List<PulseCondition> conditionList = new ArrayList<>();

    public newPulseAnalysis() {
        conditionList.add(new PulseCondition("涩", 7)); //12.7 修改为7  以前是5 在紧张度里面进行了添加 周期最大间隔进行了添加
        conditionList.add(new PulseCondition("沉", 1));
        conditionList.add(new PulseCondition("浮", 1));
        conditionList.add(new PulseCondition("迟", 1));
        conditionList.add(new PulseCondition("结", 2));
        conditionList.add(new PulseCondition("代", 2));
        conditionList.add(new PulseCondition("缓", 1));
        conditionList.add(new PulseCondition("平", 4));
        conditionList.add(new PulseCondition("实", 7));
        conditionList.add(new PulseCondition("数", 1));
        conditionList.add(new PulseCondition("促", 2));
        conditionList.add(new PulseCondition("芤", 5));
        conditionList.add(new PulseCondition("动", 7));
        conditionList.add(new PulseCondition("疾", 1));
        conditionList.add(new PulseCondition("紧", 9)); //12.4 修改为11  以前是8 在脉率里面进行了添加  在变形度里面进行了添加  在流利度度里面进行了添加
        conditionList.add(new PulseCondition("濡", 7));
        conditionList.add(new PulseCondition("洪", 2));
        conditionList.add(new PulseCondition("牢", 6));//12.4 修改为6  以前是7 在变形度里面进行了删除
        conditionList.add(new PulseCondition("弦", 4));
        conditionList.add(new PulseCondition("滑", 5));
        conditionList.add(new PulseCondition("虚", 2));
        conditionList.add(new PulseCondition("伏", 2));
        conditionList.add(new PulseCondition("革", 5)); //12.4 修改为5  以前是4 在流利度里面进行了添加
        conditionList.add(new PulseCondition("弱", 3));
        conditionList.add(new PulseCondition("细", 3));
        conditionList.add(new PulseCondition("微", 1));//12.4 修改为1  以前是2 在变形度里面进行了删除
    }

    /// <summary>
    /// 根据周期最大间隔返回脉型 ----12.7新添
    /// </summary>
    /// <param name="_periodicIntervals">周期间隔</param>
    /// <returns></returns>
    public List<String> ReturnMaxPeriodicIntervals(double _periodicIntervals) {
        List<String> _pulseType = new ArrayList<>();

        if (_periodicIntervals > 0.12) {
            _pulseType.add("涩");
        }
        return _pulseType;
    }


    /// <summary>
    /// 根据脉率返回脉型
    /// </summary>
    /// <param name="_pulseRate"></param>
    /// <returns></returns>
    public List<String> ReturnPulseRate(double _pulseRate) {
        List<String> _pulseType = new ArrayList<>();
        if (_pulseRate < 60) {
            _pulseType.add("涩");
            _pulseType.add("迟");
            _pulseType.add("结");
            _pulseType.add("代");
            _pulseType.add("紧");
        } else if (_pulseRate >= 60 && _pulseRate <= 70) {
            _pulseType.add("涩");
            _pulseType.add("缓");
            _pulseType.add("代");
        } else if (_pulseRate > 70 && _pulseRate < 90) {
            _pulseType.add("平");
            _pulseType.add("实");
            _pulseType.add("代");
        } else if (_pulseRate >= 90 && _pulseRate <= 125) {
            _pulseType.add("数");
            _pulseType.add("促");
            _pulseType.add("芤");
            _pulseType.add("动");
            _pulseType.add("紧");
        } else if (_pulseRate >= 125 && _pulseRate <= 135) {
            _pulseType.add("疾");
        } else {
            //  myHelper.mySendMessageToMainWindow("showWarn|" + "脉率超过135，重疾警报");
        }
        return _pulseType;
    }

    /// <summary>
    /// 根据脉力均匀度返回脉型
    /// </summary>
    /// <returns></returns>
    public List<String> ReturnPulseForceUniformity() {
        List<String> _pulseType = new ArrayList<>();

        return _pulseType;
    }

    /// <summary>
    /// 根据脉律返回脉型
    /// </summary>
    /// <param name="_isInterval">是否有间歇</param>
    /// <param name="isRule">间歇是否有规律</param>
    /// <returns></returns>
    public List<String> ReturnPulseLV(boolean _isInterval, boolean isRule) {
        List<String> _pulseType = new ArrayList<>();
        if (_isInterval) {
            if (isRule) {
                _pulseType.add("代");
            } else {
                _pulseType.add("促");
                _pulseType.add("结");
            }
        }
        return _pulseType;
    }

    /// <summary>
    ///  根据脉峰数量返回脉型
    /// </summary>
    /// <param name="_crestCount">波峰数量</param>
    /// <returns></returns>
    public List<String> ReturneCrestCount(int _crestCount) {
        List<String> _pulseType = new ArrayList<>();

        if (_crestCount == 1) {
            _pulseType.add("紧");
        } else if (_crestCount == 2) {
            _pulseType.add("芤");
            _pulseType.add("动");
        } else {
            _pulseType.add("平");
            _pulseType.add("实");
            _pulseType.add("濡");
        }
        return _pulseType;
    }

    /// <summary>
    ///  根据脉力返回脉型 ---- 逐个判断 明明的指示
    /// </summary>
    /// <param name="_crestCount">h1</param>
    /// <returns></returns>
    public List<String> ReturnPulseForce(double _h1) {
        List<String> _pulseType = new ArrayList<>();
        double _staticH1 = ConstantCls.StaticH1;

        if (_h1 > _staticH1 * 1.5) {
            _pulseType.add("洪");
        }
        if (_h1 > _staticH1 * 1.2) {
            _pulseType.add("实");
            _pulseType.add("紧");
            _pulseType.add("牢");
        }
        if (_h1 > _staticH1) {
            _pulseType.add("弦");
            _pulseType.add("动");
        }
        if (_h1 > _staticH1 / 2) {
            _pulseType.add("滑");
        }
        if (_h1 > _staticH1 * 3 / 4 && _h1 < _staticH1 * 1.2) {
            _pulseType.add("平");
        }
        if (_h1 < _staticH1) {
            _pulseType.add("涩");
        }
        if (_h1 < _staticH1 / 2) {
            _pulseType.add("虚");
            _pulseType.add("伏");
            _pulseType.add("濡");
            _pulseType.add("革");
            _pulseType.add("弱");
            _pulseType.add("细");
        }
        if (_h1 < _staticH1 / 4) {
            _pulseType.add("微");
        }

        return _pulseType;
    }

    /// <summary>
    /// 根据紧张度返回脉型
    /// </summary>
    /// <param name="_w">p主波上部周期</param>
    /// <param name="_t">周期</param>
    /// <param name="_h1">主波幅</param>
    /// <param name="_h3"></param>
    /// <param name="_h4"></param>
    /// <returns></returns>
    public List<String> ReturnPulseTension(double _w, double _t, double _h1, double _h3, double _h4) {
        List<String> _pulseType = new ArrayList<>();

        if (_w / _t > 0.2) {
            _pulseType.add("弦");
            _pulseType.add("牢");
            _pulseType.add("革");
            _pulseType.add("紧");
        } else if (_w / _t < 0.2) {
            _pulseType.add("濡");
        }

        if (_h3 / _h1 > 0.7) {
            _pulseType.add("弦");
            _pulseType.add("牢");
            _pulseType.add("革");
            _pulseType.add("紧");
        } else {
            _pulseType.add("濡");
        }

        if (_h4 > 0 && _h4 / _h1 > 0.5) {
            _pulseType.add("弦");
            _pulseType.add("牢");
            _pulseType.add("紧");
        } else {
            _pulseType.add("濡");
            _pulseType.add("滑");
            _pulseType.add("涩");  //12.4新添加
        }
        return _pulseType;
    }

    /// <summary>
    /// 根据流利度返回脉型
    /// </summary>
    /// <param name="_incidenceAngle">入射角</param>
    /// <param name="_mainWaveAngle">主波角</param>
    /// <param name="_t1">主波上升期</param>
    /// <returns></returns>
    public List<String> ReturnFluency(double _incidenceAngle, double _mainWaveAngle, double _t1) {
        List<String> _pulseType = new ArrayList<>();

        if (_incidenceAngle > 80) {
            _pulseType.add("滑");
            _pulseType.add("动");
        } else {
            _pulseType.add("紧");
            _pulseType.add("涩");
            _pulseType.add("牢");
        }

        if (_mainWaveAngle > 17 && _mainWaveAngle < 27) {
            _pulseType.add("滑");
            _pulseType.add("动");
        } else if (_mainWaveAngle > 28 && _mainWaveAngle <= 42) {
            _pulseType.add("涩");
        } else if (_mainWaveAngle > 42) //12.4新添加
        {
            _pulseType.add("紧");
            _pulseType.add("革");
        }

        if (_t1 < 0.12) //12.4改为0.12
        {
            _pulseType.add("滑");
            _pulseType.add("动");
        } else if (_t1 > 0.09) {
            _pulseType.add("紧");
            _pulseType.add("涩");
            _pulseType.add("牢");
        }
        return _pulseType;
    }


    /// <summary>
    /// 根据脉位返回脉型
    /// </summary>
    /// <returns></returns>
    public List<String> ReturnPulsePosition(double _h1Fu, double _h1Zhong, double _h1Chen) {
        List<String> _pulseType = new ArrayList<>();
        if ((_h1Fu - _h1Zhong > _h1Zhong * 0.15) && ((_h1Chen < _h1Zhong) || ((_h1Zhong == 0) && (_h1Chen == 0)))) {
            _pulseType.add("浮");
            _pulseType.add("濡");
            _pulseType.add("虚");
            _pulseType.add("革");
            _pulseType.add("芤");
            _pulseType.add("洪");
        } else if ((_h1Chen - _h1Zhong < _h1Zhong * 0.15) && (_h1Zhong - _h1Fu < _h1Zhong * 0.15)) {
            _pulseType.add("平");
            _pulseType.add("实");
        } else if ((_h1Chen - _h1Zhong > _h1Zhong * 0.15) && ((_h1Fu < _h1Zhong) || ((_h1Zhong == 0) && (_h1Fu == 0)))) {
            _pulseType.add("沉");
            _pulseType.add("弱");
        }
        return _pulseType;
    }

    /// <summary>
    /// 根据变形度返回脉型
    /// </summary>
    /// <param name="_pluseAnalysisFu"></param>
    /// <param name="_pluseAnalysisZhong"></param>
    /// <param name="_pluseAnalysisChen"></param>
    /// <param name="_h4"></param>
    /// <param name="_h1"></param>
    /// <returns></returns>
    public List<String> ReturnDeformability(double _zhuBoJiaJiaoFu, double _zhuBoJiaJiaoZhong, double _h1Fu, double _h1Zhong, double _h1Chen,
                                            double _h4, double _h1) {
        List<String> _pulseType = new ArrayList<>();
        double _staticH1 = ConstantCls.StaticH1;

        if (_zhuBoJiaJiaoZhong - _zhuBoJiaJiaoFu > 10) {
            _pulseType.add("濡");
        } else if (_zhuBoJiaJiaoZhong - _zhuBoJiaJiaoFu < 10) {
            _pulseType.add("实");
        }
        if (_h4 > 0 && _h4 / _h1 < 0.15) {
            _pulseType.add("芤");
            Log.d(TAG, "_h4 / _h1 :" + (_h4 / _h1));
        }
        if ((_h1Zhong - _h1Fu) / _h1 < 0.2) {
            _pulseType.add("实");
        }
        if ((_h1Zhong - _h1Chen) / _h1 < 0.2) {
            _pulseType.add("实");
        }
        if ((_h1Zhong < _staticH1 * 0.15) && (_h1Chen < _staticH1 * 0.15)) {
            _pulseType.add("芤");
        }
        if (_h1Fu < _staticH1 * 0.15) {
            _pulseType.add("紧");
            _pulseType.add("弱");
        }
        //if ((_h1Chen < _staticH1 * 0.15) && (_h1Fu < _staticH1 * 0.15))
        //{
        //    _pulseType.Add("微");
        //}
        return _pulseType;
    }
}

class PulseCondition {
    //脉型
    public String PulseType;
    //符合脉型条件的数量
    public int ConditionCount;

    public PulseCondition() {
    }

    public PulseCondition(String pulseType, int conditionCount) {
        PulseType = pulseType;
        ConditionCount = conditionCount;
    }

    public String getPulseType() {
        return PulseType;
    }

    public void setPulseType(String pulseType) {
        PulseType = pulseType;
    }

    public int getConditionCount() {
        return ConditionCount;
    }

    public void setConditionCount(int conditionCount) {
        ConditionCount = conditionCount;
    }
}
